home *** CD-ROM | disk | FTP | other *** search
/ io Programmo 60 / IOPROG_60.ISO / soft / c++ / gsl-1.1.1-setup.exe / {app} / src / fit / test.c < prev   
Encoding:
C/C++ Source or Header  |  2001-08-22  |  6.2 KB  |  174 lines

  1. /* These tests are based on the NIST Statistical Reference Datasets
  2.    See http://www.nist.gov/itl/div898/strd/index.html for more
  3.    information. */
  4.  
  5. #include <config.h>
  6. #include <stdlib.h>
  7. #include <gsl/gsl_math.h>
  8. #include <gsl/gsl_test.h>
  9. #include <gsl/gsl_fit.h>
  10.  
  11. #include <gsl/gsl_ieee_utils.h>
  12.  
  13. size_t norris_n = 36;
  14.  
  15. double norris_x[] = { 0.2, 337.4, 118.2, 884.6, 10.1, 226.5, 666.3, 996.3,
  16.                       448.6, 777.0, 558.2, 0.4, 0.6, 775.5, 666.9, 338.0, 
  17.                       447.5, 11.6, 556.0, 228.1, 995.8, 887.6, 120.2, 0.3, 
  18.                       0.3, 556.8, 339.1, 887.2, 999.0, 779.0, 11.1, 118.3,
  19.                       229.2, 669.1, 448.9, 0.5 } ;
  20.  
  21. double norris_y[] = { 0.1, 338.8, 118.1, 888.0, 9.2, 228.1, 668.5, 998.5,
  22.                       449.1, 778.9, 559.2, 0.3, 0.1, 778.1, 668.8, 339.3, 
  23.                       448.9, 10.8, 557.7, 228.3, 998.0, 888.8, 119.6, 0.3, 
  24.                       0.6, 557.6, 339.3, 888.0, 998.5, 778.9, 10.2, 117.6,
  25.                       228.9, 668.4, 449.2, 0.2};
  26.  
  27. size_t noint1_n = 11;
  28. double noint1_x[] = { 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70 };
  29. double noint1_y[] = { 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140};
  30.  
  31. size_t noint2_n = 3;
  32. double noint2_x[] = { 4, 5, 6 } ;
  33. double noint2_y[] = { 3, 4, 4 } ;
  34.  
  35. int
  36. main (void)
  37. {
  38.  
  39.  
  40.   double x[1000], y[1000], w[1000];
  41.  
  42.   size_t xstride = 2, wstride = 3, ystride = 5;
  43.   size_t i;
  44.  
  45.   for (i = 0; i < norris_n; i++) 
  46.     {
  47.       x[i*xstride] = norris_x[i];
  48.       w[i*wstride] = 1.0;
  49.       y[i*ystride] = norris_y[i];
  50.     }
  51.  
  52.   gsl_ieee_env_setup();
  53.  
  54.   {
  55.     double c0, c1, cov00, cov01, cov11, sumsq;
  56.        
  57.     double expected_c0 = -0.262323073774029;
  58.     double expected_c1 =  1.00211681802045; 
  59.     double expected_cov00 = pow(0.232818234301152, 2.0);
  60.     double expected_cov01 = -7.74327536339570e-05;  /* computed from octave */
  61.     double expected_cov11 = pow(0.429796848199937E-03, 2.0);
  62.     double expected_sumsq = 26.6173985294224;
  63.     
  64.     gsl_fit_linear (x, xstride, y, ystride, norris_n, 
  65.                     &c0, &c1, &cov00, &cov01, &cov11, &sumsq);
  66.     
  67.     /* gsl_fit_wlinear (x, xstride, w, wstride, y, ystride, norris_n, 
  68.                      &c0, &c1, &cov00, &cov01, &cov11, &sumsq); */
  69.   
  70.     gsl_test_rel (c0, expected_c0, 1e-10, "norris gsl_fit_linear c0") ;
  71.     gsl_test_rel (c1, expected_c1, 1e-10, "norris gsl_fit_linear c1") ;
  72.     gsl_test_rel (cov00, expected_cov00, 1e-10, "norris gsl_fit_linear cov00") ;
  73.     gsl_test_rel (cov01, expected_cov01, 1e-10, "norris gsl_fit_linear cov01") ;
  74.     gsl_test_rel (cov11, expected_cov11, 1e-10, "norris gsl_fit_linear cov11") ;
  75.     gsl_test_rel (sumsq, expected_sumsq, 1e-10, "norris gsl_fit_linear sumsq") ;
  76.   }
  77.  
  78.   {
  79.     double c0, c1, cov00, cov01, cov11, sumsq;
  80.        
  81.     double expected_c0 = -0.262323073774029;
  82.     double expected_c1 =  1.00211681802045; 
  83.     double expected_cov00 = 6.92384428759429e-02;  /* computed from octave */
  84.     double expected_cov01 = -9.89095016390515e-05; /* computed from octave */
  85.     double expected_cov11 = 2.35960747164148e-07;  /* computed from octave */
  86.     double expected_sumsq = 26.6173985294224;
  87.     
  88.     gsl_fit_wlinear (x, xstride, w, wstride, y, ystride, norris_n, 
  89.                      &c0, &c1, &cov00, &cov01, &cov11, &sumsq);
  90.   
  91.     gsl_test_rel (c0, expected_c0, 1e-10, "norris gsl_fit_wlinear c0") ;
  92.     gsl_test_rel (c1, expected_c1, 1e-10, "norris gsl_fit_wlinear c1") ;
  93.     gsl_test_rel (cov00, expected_cov00, 1e-10, "norris gsl_fit_wlinear cov00") ;
  94.     gsl_test_rel (cov01, expected_cov01, 1e-10, "norris gsl_fit_wlinear cov01") ;
  95.     gsl_test_rel (cov11, expected_cov11, 1e-10, "norris gsl_fit_wlinear cov11") ;
  96.     gsl_test_rel (sumsq, expected_sumsq, 1e-10, "norris gsl_fit_wlinear sumsq") ;
  97.   }
  98.  
  99.   for (i = 0; i < noint1_n; i++) 
  100.     {
  101.       x[i*xstride] = noint1_x[i];
  102.       w[i*wstride] = 1.0;
  103.       y[i*ystride] = noint1_y[i];
  104.     }
  105.  
  106.   {
  107.     double c1, cov11, sumsq;
  108.        
  109.     double expected_c1 = 2.07438016528926; 
  110.     double expected_cov11 = pow(0.165289256198347E-01, 2.0);  
  111.     double expected_sumsq = 127.272727272727;
  112.     
  113.     gsl_fit_mul (x, xstride, y, ystride, noint1_n, &c1, &cov11, &sumsq);
  114.   
  115.     gsl_test_rel (c1, expected_c1, 1e-10, "noint1 gsl_fit_mul c1") ;
  116.     gsl_test_rel (cov11, expected_cov11, 1e-10, "noint1 gsl_fit_mul cov11") ;
  117.     gsl_test_rel (sumsq, expected_sumsq, 1e-10, "noint1 gsl_fit_mul sumsq") ;
  118.   }
  119.  
  120.   {
  121.     double c1, cov11, sumsq;
  122.        
  123.     double expected_c1 = 2.07438016528926; 
  124.     double expected_cov11 = 2.14661371686165e-05; /* computed from octave */
  125.     double expected_sumsq = 127.272727272727;
  126.     
  127.     gsl_fit_wmul (x, xstride, w, wstride, y, ystride, noint1_n, &c1, &cov11, &sumsq);
  128.  
  129.     gsl_test_rel (c1, expected_c1, 1e-10, "noint1 gsl_fit_wmul c1") ;
  130.     gsl_test_rel (cov11, expected_cov11, 1e-10, "noint1 gsl_fit_wmul cov11") ;
  131.     gsl_test_rel (sumsq, expected_sumsq, 1e-10, "noint1 gsl_fit_wmul sumsq") ;
  132.   }
  133.  
  134.  
  135.   for (i = 0; i < noint2_n; i++) 
  136.     {
  137.       x[i*xstride] = noint2_x[i];
  138.       w[i*wstride] = 1.0;
  139.       y[i*ystride] = noint2_y[i];
  140.     }
  141.  
  142.   {
  143.     double c1, cov11, sumsq;
  144.        
  145.     double expected_c1 = 0.727272727272727; 
  146.     double expected_cov11 = pow(0.420827318078432E-01, 2.0);  
  147.     double expected_sumsq = 0.272727272727273;
  148.     
  149.     gsl_fit_mul (x, xstride, y, ystride, noint2_n, &c1, &cov11, &sumsq);
  150.   
  151.     gsl_test_rel (c1, expected_c1, 1e-10, "noint2 gsl_fit_mul c1") ;
  152.     gsl_test_rel (cov11, expected_cov11, 1e-10, "noint2 gsl_fit_mul cov11") ;
  153.     gsl_test_rel (sumsq, expected_sumsq, 1e-10, "noint2 gsl_fit_mul sumsq") ;
  154.   }
  155.  
  156.   {
  157.     double c1, cov11, sumsq;
  158.        
  159.     double expected_c1 = 0.727272727272727; 
  160.     double expected_cov11 = 1.29870129870130e-02 ; /* computed from octave */
  161.     double expected_sumsq = 0.272727272727273;
  162.     
  163.     gsl_fit_wmul (x, xstride, w, wstride, y, ystride, noint2_n, &c1, &cov11, &sumsq);
  164.  
  165.     gsl_test_rel (c1, expected_c1, 1e-10, "noint2 gsl_fit_wmul c1") ;
  166.     gsl_test_rel (cov11, expected_cov11, 1e-10, "noint2 gsl_fit_wmul cov11") ;
  167.     gsl_test_rel (sumsq, expected_sumsq, 1e-10, "noint2 gsl_fit_wmul sumsq") ;
  168.   }
  169.  
  170.   /* now summarize the results */
  171.  
  172.   exit (gsl_test_summary ());
  173. }
  174.